export interface BuildWeightsConfig {
    [index: string]: number;
}

export interface BuildConfig {
    maxIssues?: number;
    excludeCorrectable?: false,
    weights: BuildWeightsConfig;
    [index: string]: unknown;
}

export interface ConfigConfig {
    validation?: boolean;
    warningsAsErrors?: boolean;
    checkExhaustiveness?: boolean;
    excludes?: string;
    [index: string]: unknown;
}

export interface ProcessorsConfig {
    active?: boolean;
    exclude?: string[];
    [index: string]: unknown;
}

export interface ConsoleReportsConfig {
    active?: boolean;
    exclude?: string[];
    [index: string]: unknown;
}

export interface OutputReportsConfig {
    active?: boolean;
    exclude?: string[];
    [index: string]: unknown;
}

export interface RuleValue {
    active?: boolean;
    [index: string]: unknown;
}

export interface RuleConfig {
    active?: boolean;
    [index: string]: RuleValue | boolean | undefined;
}

export interface Config {
    build?: BuildConfig;
    config?: ConfigConfig;
    processors?: ProcessorsConfig;
    "console-reports"?: ConsoleReportsConfig;
    "output-reports"?: OutputReportsConfig;
    comments?: RuleConfig;
    complexity?: RuleConfig;
    coroutines?: RuleConfig;
    "empty-blocks"?: RuleConfig;
    exceptions?: RuleConfig;
    formatting?: RuleConfig;
    libraries?: RuleConfig;
    naming?: RuleConfig;
    performance?: RuleConfig;
    "potential-bugs"?: RuleConfig;
    style?: RuleConfig;
    [index: string]: unknown;
}